"""
问题： 如果可迭代对象的元素个数超过变量的个数时， 会抛出一个ValueError
      那么怎样才能从这个可迭代对象中解压出N个对象呢
"""


# 解决方案：
# Python可以用星号表达式


def main():
    def drop_first_last(grades):
        first, *middle, last = grades
        print(type(middle))  # 注意middle永远都是列表类型， 不管实际有多少个
        return sum(middle) / len(middle)

    grades = [120, 300, 400, 500, 600]
    print(drop_first_last(grades))

    record = ('ACME', 50, 123.45, (12, 18, 2012))
    name, *_, (*__, year) = record  # 提取想要的元素
    print(name, year)


records = [
    ('foo', 1, 2),
    ('bar', 'hello')
]


def dofoo(x, y):
    print(x + y)


def dobar(x):
    print(x)


def mysum(items):
    # 实现递归求和
    head, *args = items
    print(*args)        # 加星号表示单个单个的对象
    print(args)         # 不加信号为列表
    return head + mysum(args) if args else head


if __name__ == '__main__':
    # main()

    # for tag, *args in records:
    #     if tag == 'foo':
    #         dofoo(*args)
    #     else:
    #         dobar(*args)

    print(mysum([1, 2, 3, 4, 5]))
